package com.dash.dashupload;

import com.dash.pojo.Video;

import android.os.AsyncTask;
import android.util.Log;
import android.widget.ProgressBar;
import android.widget.TextView;

/**
 * 生成该类的对象，并调用execute方法之后 首先执行的是onProExecute方法 其次执行doInBackgroup方法
 * 
 * 第一个参数为执行任务传入的参数，第二个为更新返回参数，第三个为执行完后台任务返回的参数
 */
public class UploadTask extends AsyncTask<Video, Integer, Integer> {
	private TextView textView;
	private ProgressBar progressBar;
	private UploadFileUtil uploadFileUtil;

	public UploadTask(TextView textView, ProgressBar progressBar) {
		this.textView = textView;
		this.progressBar = progressBar;
	}

	/**
	 * 这里的Integer参数对应AsyncTask中的第一个参数 这里的String返回值对应AsyncTask的第三个参数
	 * 该方法并不运行在UI线程当中，主要用于异步操作，所有在该方法中不能对UI当中的空间进行设置和修改
	 * 但是可以调用publishProgress方法触发onProgressUpdate对UI进行操作
	 */
	@Override
	protected Integer doInBackground(Video... params) {
		uploadFileUtil = new UploadFileUtil();
		int len = params.length;
		progressBar.setMax(len);
		int i = 1;
		for (; i <= len; i++) {
			Log.i("doInBackgrould---", "uploadFile:" + params[i - 1]);
			// String srcPath,int userId,String title,int segmentTotal,
			// String segmentFileName,String date
			uploadFileUtil.uploadFile(params[i - 1].getSrcPath(),
							params[i - 1].getUserId(),
							params[i - 1].getTitle(),
							params[i - 1].getSegmentTotal(),
							params[i - 1].getSegmentFileName(),
							params[i - 1].getDate());
			publishProgress(i);
		}
		return i;
	}

	/**
	 * 这里的String参数对应AsyncTask中的第三个参数（也就是接收doInBackground的返回值）
	 * 在doInBackground方法执行结束之后在运行，并且运行在UI线程当中 可以对UI空间进行设置
	 */
	@Override
	protected void onPostExecute(Integer result) {
		System.out.println("上传操作执行结束" + result);
	}

	// 该方法运行在UI线程当中,并且运行在UI线程当中 可以对UI空间进行设置
	@Override
	protected void onPreExecute() {
		System.out.println("开始执行异步上传线程");
	}

	/**
	 * 这里的Intege参数对应AsyncTask中的第二个参数
	 * 在doInBackground方法当中，，每次调用publishProgress方法都会触发onProgressUpdate执行
	 * onProgressUpdate是在UI线程中执行，所有可以对UI空间进行操作
	 */
	@Override
	protected void onProgressUpdate(Integer... values) {
		int vlaue = values[0];
		progressBar.setProgress(vlaue);
	}

}
